import { _decorator, Component, Node, Vec3, tween, Quat } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('dice')
export class dice extends Component {

    @property(Node)
    dice: Node | null = null;

    // 预定义六个面的四元数旋转
    private readonly faceRotations: Quat[] = [
        Quat.fromEuler(new Quat(), 0, 0, 0),        // 面 1
        Quat.fromEuler(new Quat(), 0, 180, 0),      // 面 2
        Quat.fromEuler(new Quat(), 0, 90, 0),       // 面 3
        Quat.fromEuler(new Quat(), 0, -90, 0),      // 面 4
        Quat.fromEuler(new Quat(), 90, 0, 0),       // 面 5
        Quat.fromEuler(new Quat(), -90, 0, 0)       // 面 6
    ];

    private timer: number = 0;

    onLoad() {
        console.log("---onLoad---");
    }

    rollDice() {
        // 从预定义的旋转角度中随机选择一个
        const randomIndex = Math.floor(Math.random() * this.faceRotations.length);
        const targetRotation = this.faceRotations[randomIndex];

        // 使用 Tween 实现平滑旋转，并在完成后微调角度
        if (this.dice) {
            tween(this.dice)
                .to(1, { rotation: this.randomQuaternion() }) // 随机旋转
                .to(0.5, { rotation: targetRotation }) // 平滑旋转到目标面
                .call(() => {
                    // 确保旋转精确到目标角度
                    this.dice.setRotation(targetRotation);
                })
                .start();
        }
    }

    // 生成一个随机四元数
    private randomQuaternion(): Quat {
        const q = new Quat();
        Quat.fromEuler(q, this.randomInRange(0, 360), this.randomInRange(0, 360), this.randomInRange(0, 360));
        return q;
    }

    // 自定义一个函数来实现类似 randomRange 的效果
    private randomInRange(min: number, max: number): number {
        return Math.random() * (max - min) + min;
    }

    update(deltaTime: number) {
        this.timer += deltaTime;

        if (this.timer > 5) {
            this.rollDice();
            this.timer = 0; // 重置定时器
        }
    }

    onDestroy() {
        console.log("---destroy:---");
    }
}
